package com.mmy.service.impl.line;

import java.math.BigDecimal;
import java.text.Format;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.mmy.dao.constparameter.TConstParameterRepository;
import com.mmy.dao.line.VLinePlanRepository;
import com.mmy.domain.constparameter.TConstParameter;
import com.mmy.domain.line.TLineOrder;
import com.mmy.domain.line.TLinePlan;
import com.mmy.domain.line.VLinePlan;

@Service
public class LineFrontServiceImpl {
	
	@Autowired
	private VLinePlanRepository vLinePlanRepository;
	@Autowired
	TConstParameterRepository tConstParameterRepository;
	
	/**
	 * 函数功能说明： 获取线路价格日历
	 *
	 * @param 参数说明
	 * @return 返回值说明 json
	 * @throws 异常处理说明
	 * @author 创建人  liys
	 * @date 创建日期 2021.01.22
	 */

	public String getPriceCalendar(List<VLinePlan> lstLinePlan) {
		
		Date date = new Date();
		Format f = new SimpleDateFormat("yyyy-MM-dd");
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		cal.set(Calendar.HOUR_OF_DAY, 0);
		cal.set(Calendar.MINUTE, 0);
		cal.set(Calendar.SECOND, 1);
		cal.set(Calendar.MILLISECOND, 0);
		List<Map<String,String>> list = new ArrayList<>();
		int iMaxDay = 100;
		String strText = "近郊游预定最大天数";
		TConstParameter dbConstParameter = tConstParameterRepository.getByText(strText);
		if(dbConstParameter != null) {
			iMaxDay = dbConstParameter.getValue().intValue();
		}
		for (int i = 0; i < iMaxDay; i++) {
			cal.add(Calendar.DAY_OF_MONTH, 1);
			Date today = cal.getTime();
			Map<String,String> map = new HashMap<>();
			map.put("date",f.format(today));
			List<BigDecimal> lstPrice = new ArrayList<BigDecimal>();
			for(VLinePlan vLinePlan : lstLinePlan) {
				Date startDate = vLinePlan.getStartDate();
				Date endDate = vLinePlan.getEndDate();
				if(today.before(endDate) & startDate.before(today)) {
					BigDecimal price = vLinePlan.getPrice();
					lstPrice.add(price);
				}
			}
			if(lstPrice.size() == 0) {
				continue;
			}else {
				BigDecimal min = Collections.min(lstPrice);
				map.put("price", min.toString());
				list.add(map);
			}	
		}
		return JSONObject.toJSONString(list);
	}
	/**
	 * 函数功能说明： 获取预留总价
	 *
	 * @param 参数说明 List<TLinePlan>
	 * @return 返回值说明 BigDecimal
	 * @throws 异常处理说明
	 * @author 创建人  liys
	 * @date 创建日期 2021.01.22
	 */
	public BigDecimal queryPrice(List<TLinePlan> lstLinePlan) {
		
		BigDecimal total = new BigDecimal("0");
		for(TLinePlan tLinePlan : lstLinePlan) {
			Integer planID = tLinePlan.getPlanID();
			VLinePlan vLinePlan = vLinePlanRepository.findByPlanID(planID);
			BigDecimal price =  vLinePlan.getPrice();
			Integer num = tLinePlan.getNumber();
			BigDecimal sum = price.multiply(BigDecimal.valueOf(num));
			total = total.add(sum);
		}
		return total;
	}
	/**
	 * 函数功能说明： 获取预留订单数量
	 *
	 * @param 参数说明 List<TLinePlan>
	 * @return 返回值说明 int
	 * @throws 异常处理说明
	 * @author 创建人  liys
	 * @date 创建日期 2021.01.22
	 */
	public int planCount(List<TLinePlan> lstLinePlan) {
		
		int num = 0;
		for(TLinePlan tLinePlan : lstLinePlan) {
			num += tLinePlan.getNumber();
		}
		return num;
	}
	
	/**
	 * 函数功能说明： 字符串日期 yyyy-MM-dd 转Date类
	 *
	 * @param 参数说明 预约日期str
	 * @return 返回值说明 date 设置成当天23:59:59
	 * @throws 异常处理说明
	 * @author 创建人  liys
	 * @date 创建日期 2021.01.27
	 */
	public Date changeDate(String strLineDate) {
		
		Calendar cal = Calendar.getInstance();
		String date = strLineDate.replace("-","");
        Integer year = Integer.parseInt(date.substring(0,4));
        Integer month = Integer.parseInt(date.substring(4,6));
        Integer day = Integer.parseInt(date.substring(6,8));
        cal.set(year, month-1, day, 23, 59, 59);
        Date lineDate = cal.getTime();
		return lineDate;
	}
	
	
	
	
	
}
